//package cn.genmer.test.security.mq.rabbitmq;
//
//import cn.genmer.test.security.utils.RedisOperator;
//import com.alibaba.fastjson.JSONObject;
//import org.springframework.amqp.core.Message;
//import org.springframework.amqp.core.MessageBuilder;
//import org.springframework.amqp.core.MessageDeliveryMode;
//import org.springframework.amqp.core.MessageProperties;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.amqp.rabbit.connection.CorrelationData;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//import java.util.UUID;
///**
// * 创 建 人 ： yyq
// */
//@RestController
//@RequestMapping("/send/")
//public class test {
//    @Autowired
//    RabbitTemplate rabbitTemplate;
//
//    @Autowired
//    private RedisOperator redis;
//
//    //回调函数: confirm确认
//    RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {
//        /**
//         * CorrelationData 消息的附加信息，即自定义id
//         * ack 代表消息是否被broker（MQ）接收 true 代表接收 false代表拒收。
//         * cause 如果拒收cause则说明拒收的原因，帮助我们进行后续处理
//         */
//        @Override
//        public void confirm(CorrelationData correlationData, boolean ack, String cause) {
//            System.out.println("correlationData-----------" + correlationData);
//            System.out.println("ack-----------" + ack);
//            if(ack){
//                try{  //更新数据库，可靠性投递机制
//                      // db操作略。。。
//                    System.err.println("消息已确认....");
//                }catch (Exception e)
//                {//如果更新数据库，可靠性投递机制发生错误，就往redis里面存消息ID CorrelationData，后面消费者要判断redis里面是否有该ID,过期时间设置一周
//                   redis.set(correlationData.getId(), correlationData.getId(),7*24*3600);
//                    System.out.println("操作数据库发生错误");
//                }
//            }else {
//                //ack错误打印
//                System.err.println(cause);
//            }
//        }
//    };
//    //消息失败回调函数
//   RabbitTemplate.ReturnCallback returnCallback = new RabbitTemplate.ReturnCallback() {
//        @Override
//        public void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {
//            System.err.println("return exchange: " + exchange + ", routingKey: "
//                    + routingKey + ", replyCode: " + replyCode + ", replyText: " + replyText);
//
//        }
//    };
//
//    //发送消息方法调用: 构建Message消息
//    @RequestMapping("send")
//    public void sends() throws Exception {
//        JSONObject jsonObject = new JSONObject();
//        jsonObject.put("email", "wangsheng@163.com");
//        jsonObject.put("timestamp", System.currentTimeMillis());
//        String jsonString = jsonObject.toJSONString();
//        String orderId = UUID.randomUUID().toString();
//        Message messages = MessageBuilder.withBody(jsonString.getBytes())
//                .setDeliveryMode(MessageDeliveryMode.PERSISTENT)
//                .setContentType(MessageProperties.CONTENT_TYPE_JSON).setContentEncoding("utf-8")
//                .setMessageId(orderId)
//                .build();
//        CorrelationData correlationData = new CorrelationData(orderId);
//        rabbitTemplate.setConfirmCallback(confirmCallback);
//        rabbitTemplate.setReturnCallback(returnCallback);
//        rabbitTemplate.convertAndSend("hello",messages,correlationData);//routingkey与队列名相同都是hello
//
//    }
//}